from datetime import datetime
from typing import Optional

from pydantic import BaseModel, Field, ConfigDict


class LogDTO(BaseModel):
    """系统日志"""
    model_config = ConfigDict(
        # 允许使用字段名和别名进行赋值
        populate_by_name=True,
        # JSON序列化配置
        json_encoders={
            datetime: lambda v: v.strftime("%Y-%m-%d %H:%M:%S")
        }
    )

    # 创建时间
    create_time: Optional[datetime] = Field(None, alias="createTime", description="创建时间")
    # 日志类型
    type: Optional[str] = Field(None, alias="type", description="日志类型")
    # 操作描述
    description: Optional[str] = Field(None, alias="description", description="操作描述")
    # 请求地址
    url: Optional[str] = Field(None, alias="url", description="请求地址")
    # 请求方式
    http_method: Optional[str] = Field(None, alias="httpMethod", description="请求方式")
    # 类路径
    class_path: Optional[str] = Field(None, alias="classPath", description="类路径")
    # 请求参数
    params: Optional[str] = Field(None, alias="params", description="请求参数")
    # 返回值
    result: Optional[str] = Field(None, alias="result", description="返回值")
    # 异常描述
    exception: Optional[str] = Field(None, alias="exception", description="异常描述")
    # 操作耗时
    spend_time: Optional[int] = Field(None, alias="spendTime", description="操作耗时")
    # 操作系统
    os: Optional[str] = Field(None, alias="os", description="操作系统")
    # 设备名称
    device: Optional[str] = Field(None, alias="device", description="设备名称")
    # 浏览器类型
    browser: Optional[str] = Field(None, alias="browser", description="浏览器类型")
    # ip地址
    ip: Optional[str] = Field(None, alias="ip", description="ip地址")
    # ip所在地区
    ip_region: Optional[str] = Field(None, alias="ipRegion", description="ip所在地区")
